package main

import (
	"fmt"
	"strings"
)

/**
go 中的字符串是以原生的数据类型出现的，和(int8 int64 float64 bool等一样)
string 使用 utf-8 编码
只能使用  "" 将字符串包裹
*/
func main() {
	//单引号能包裹 字符、汉字
	name := '罗'

	school := 's'

	fmt.Printf("单引号中的内容是：%c，类型是：【%T】\n", name, name)
	fmt.Printf("单个字符内容是：%c，类型是【%T】", school, school)

	// 模版字符串
	text := `
	我是带格式的多行字符串，
		你还好吗？`
	fmt.Println(text)

	fmt.Printf("字符串的长度是：%d\n", len(text))

	str := "我是普通的字符串"

	add := "字符串的拼接："
	fmt.Println(add + str)

	fmt.Printf("使用函数来拼接字符串（类似java的String.format()）：%s\n", fmt.Sprintf("%s%s", add, str))

	// 分割字符串时，sep 匹配到的字符串会被删除
	split := "的"
	fmt.Printf("分割字符串:%s\n", strings.Split(str, split))

	substr := "普通"
	//	包含api
	fmt.Printf("【%s】包含【%s】吗？【%v】\n", str, substr, strings.Contains(str, substr))

	prefix := "我是"
	//	前缀判断
	fmt.Printf("【%s】以【%s】开头吗？【%v】\n", str, prefix, strings.HasPrefix(str, prefix))

	//	后缀判断
	suffix := "字符串"
	fmt.Printf("【%s】以【%s】结尾吗？【%v】\n", str, suffix, strings.HasSuffix(str, suffix))

	//	判断子字符串出现的位置
	fmt.Printf("【%s】在【%s】中第【%d】个位置，从后往前数，遇到的第一个【%s】在正数的第【%d】个位置\n",
		substr,
		str,
		strings.Index(str, substr),
		substr,
		strings.LastIndex(str, substr),
	)

	join := "+++++++"
	splitStr := strings.Split(str, split)
	//	分割之后，再拼接字符串
	fmt.Printf("用【%s】将【%s】分割为【%s】，再用【%s】拼接，拼接之后的内容是【%s】\n",
		split,
		str,
		splitStr,
		join,
		strings.Join(splitStr, join),
	)

	//	字符串是不可变

	//将字符串切片之后便可以修改
	strArray := []rune(str)

	//注意：切片中保存的是字符，所以要使用单引号
	strArray[0] = '你'

	// 把 rune 切片强制转为 字符串
	strNew := string(strArray)

	fmt.Printf("切片并修改之后：%v\n", strNew)

	byte := byte('A')

	fmt.Printf("byte 值是【%v】的本质是【%T】", byte, byte)

}
